Asynchronous Web Services এমন একটি প্রকারের ওয়েব সার্ভিস যেখানে ক্লায়েন্ট সার্ভিসের সাথে যোগাযোগ করে এবং সার্ভিসের প্রক্রিয়া সম্পন্ন হওয়ার জন্য অপেক্ষা না করে, তা পরে কোন নির্দিষ্ট সময়ে রেসপন্স পায়। এটি সাধারণত long-running operations বা time-consuming tasks সম্পাদন করতে ব্যবহৃত হয়, যেখানে ক্লায়েন্ট সার্ভিসের প্রক্রিয়া শেষ হওয়া পর্যন্ত অপেক্ষা না করে, পরবর্তী কাজ করতে পারে। এই প্রক্রিয়া সাধারণত callback mechanisms বা message queues ব্যবহার করে বাস্তবায়িত হয়।
অ্যাসিঙ্ক্রোনাস ওয়েব সার্ভিসের মূল সুবিধা হলো, এটি ক্লায়েন্টকে সার্ভিসের প্রক্রিয়া চলাকালীন সময়ে অন্য কাজ করতে দেয় এবং সার্ভিসটি যখন সম্পন্ন হয়, তখন ক্লায়েন্ট তার রেসপন্স পেয়ে কাজ চালিয়ে যেতে পারে।
অ্যাসিঙ্ক্রোনাস ওয়েব সার্ভিসে, ক্লায়েন্ট যখন রিকোয়েস্ট পাঠায়, সার্ভার তখন সেগুলি প্রক্রিয়াকরণ শুরু করে এবং ক্লায়েন্টের কাছে অবিলম্বে একটি রেসপন্স পাঠায়। তবে রিকোয়েস্টটি সম্পূর্ণভাবে প্রক্রিয়া শেষ হওয়ার পর রেসপন্সটি মূল কাজের (অর্থাৎ, রিকোয়েস্টের ফলাফল) সাথে ফিরিয়ে দেওয়া হয়। এটি এমন সিস্টেমের জন্য অত্যন্ত উপকারী যেখানে দীর্ঘ সময় পর্যন্ত ডেটা প্রসেসিং বা সার্ভিস সম্পাদন করা হয়।
অ্যাসিঙ্ক্রোনাস ওয়েব সার্ভিসের কার্যপ্রণালী তিনটি মূল ধাপে সম্পন্ন হয়:
ক্লায়েন্ট প্রথমে ওয়েব সার্ভিসে একটি রিকোয়েস্ট পাঠায়। এই রিকোয়েস্ট সাধারণত সিঙ্ক্রোনাস রিকোয়েস্টের মতো হয়, কিন্তু ক্লায়েন্ট ওয়েব সার্ভিসের সাথে ব্লকিং রেসপন্সের জন্য অপেক্ষা না করে, তার কাজ চালিয়ে যায়।
ওয়েব সার্ভিস সার্ভারে রিকোয়েস্ট প্রক্রিয়া শুরু হয়। সার্ভার কাজটি প্রক্রিয়া করছে, তবে এটি ক্লায়েন্টকে অবিলম্বে একটি "Acknowledgment" বা "Request Accepted" বার্তা পাঠাতে পারে।
ক্লায়েন্টের কাছে সার্ভিসটির ফলাফল পৌঁছানোর জন্য দুটি সাধারণ পদ্ধতি ব্যবহৃত হয়:
ধরা যাক, একটি ওয়েব সার্ভিস যেটি বড় কোনো ডেটা প্রসেসিং বা রিপোর্ট জেনারেশন কাজ সম্পাদন করে। এখানে অ্যাসিঙ্ক্রোনাস ওয়েব সার্ভিস ব্যবহারের প্রক্রিয়া:
অ্যাসিঙ্ক্রোনাস ওয়েব সার্ভিসকে সাধারণত দুটি প্রধান পদ্ধতি ব্যবহার করে ইমপ্লিমেন্ট করা হয়:
JAX-WS (Java API for XML Web Services) SOAP ওয়েব সার্ভিসে অ্যাসিঙ্ক্রোনাস প্রক্রিয়া বাস্তবায়ন করতে সহায়তা করে। নিচে একটি সাধারণ উদাহরণ দেখানো হল:
@WebService
public interface MyAsyncService {
@WebMethod
@Asynchronous
Future<String> processDataAsync(String data);
}
এখানে, @Asynchronous
অ্যানোটেশন ব্যবহার করে, আপনি processDataAsync
মেথডটি অ্যাসিঙ্ক্রোনাসভাবে এক্সিকিউট করতে পারবেন।
JAX-RS (Java API for RESTful Web Services) অ্যাসিঙ্ক্রোনাস RESTful ওয়েব সার্ভিস তৈরিতে ব্যবহৃত হয়। এখানে একটি সাধারণ উদাহরণ:
@Path("/async")
public class MyAsyncRestService {
@GET
@Path("/process")
public void processData(@Suspended final AsyncResponse asyncResponse) {
// Simulate long-running task
new Thread(() -> {
String result = "Processed data";
asyncResponse.resume(result);
}).start();
}
}
এখানে, @Suspended
অ্যানোটেশনটি ক্লায়েন্টের রেসপন্সের জন্য অপেক্ষা না করে, অ্যাসিঙ্ক্রোনাস ভাবে কাজ করে।
অ্যাসিঙ্ক্রোনাস ওয়েব সার্ভিসের মাধ্যমে আপনি সার্ভিসের দীর্ঘ প্রসেসিং সময়কে ক্লায়েন্টের জন্য বিলম্বিত না করে, বরং প্যারালাল কাজ করতে সক্ষম হন। এটি বিশেষত বড় সিস্টেম বা দীর্ঘ সময় নেয়ার প্রক্রিয়ার জন্য কার্যকর। তবে, এই ধরনের সার্ভিসে সঠিক ত্রুটি পরিচালনা এবং স্টেট ম্যানেজমেন্ট গুরুত্বপূর্ণ ভূমিকা পালন করে।
Asynchronous Web Services এর মাধ্যমে একাধিক ক্লায়েন্ট এবং সার্ভার একে অপরের সাথে নিরবচ্ছিন্নভাবে যোগাযোগ করতে পারে, কিন্তু একে অপরের কাজের জন্য অপেক্ষা করার প্রয়োজন হয় না। এটি বিশেষভাবে গুরুত্বপূর্ণ যখন সার্ভিস কলগুলি দীর্ঘ সময় ধরে চলে বা কখনও কখনও ব্যস্ত সার্ভারের কারণে দীর্ঘ প্রতিক্রিয়া সময়ের সম্মুখীন হয়।
Asynchronous ওয়েব সার্ভিস হল এমন একটি সার্ভিস যেখানে ক্লায়েন্ট রিকোয়েস্ট পাঠানোর পরে, সার্ভার সেই রিকোয়েস্ট প্রক্রিয়া করতে পারে এবং একই সময়ে অন্যান্য কাজও করতে পারে, এবং শেষমেশ ক্লায়েন্টকে ফলাফল পাঠাতে পারে যখন কাজটি সম্পন্ন হবে।
Apache CXF তে অ্যাসিনক্রোনাস ওয়েব সার্ভিস তৈরি করা খুবই সহজ। CXF এর মাধ্যমে অ্যাসিনক্রোনাস ওয়েব সার্ভিসে @Async
অ্যানোটেশন ব্যবহার করা যেতে পারে অথবা Future অবজেক্ট বা Callback ক্লাসের মাধ্যমে কার্যকরী করা যায়।
@Async
অ্যানোটেশন ব্যবহারimport javax.jws.WebService;
import javax.jws.WebMethod;
import java.util.concurrent.Future;
@WebService
public class AsyncService {
@WebMethod
public Future<String> longRunningTask(String input) {
return new AsyncResult<>(processTask(input)); // Process asynchronously
}
private String processTask(String input) {
// Simulate a long-running task
try {
Thread.sleep(5000); // Simulate delay
} catch (InterruptedException e) {
e.printStackTrace();
}
return "Processed: " + input;
}
}
এই কোডে, longRunningTask
মেথডটি অ্যাসিনক্রোনাসভাবে কাজ করে এবং Future
অবজেক্টের মাধ্যমে রিকোয়েস্টের ফলাফল ফিরিয়ে দেয়।
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
public class AsyncCallbackClient {
public static void main(String[] args) {
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
factory.setServiceClass(AsyncService.class);
factory.setAddress("http://localhost:8080/asyncService");
AsyncService service = (AsyncService) factory.create();
service.longRunningTask("Request Data", new AsyncHandler<String>() {
@Override
public void handleResponse(Response<String> response) {
// Handle the response when it is ready
System.out.println("Response received: " + response.get());
}
});
}
}
এই উদাহরণে, একটি callback হ্যান্ডলার ব্যবহৃত হয়েছে, যা ওয়েব সার্ভিসের কাজ সম্পন্ন হওয়ার পর ফলাফল গ্রহণ করে।
Asynchronous Web Services ওয়েব অ্যাপ্লিকেশন ও সার্ভিস আর্কিটেকচারে কার্যকরী সমাধান প্রদান করে, বিশেষ করে দীর্ঘ সময়সাপেক্ষ প্রক্রিয়া পরিচালনা করার ক্ষেত্রে। এর মাধ্যমে সার্ভিসের দক্ষতা, স্কেলেবিলিটি, এবং পারফরম্যান্স উন্নত হয়, এবং ক্লায়েন্টরা কোনওভাবে সার্ভারের কাজের জন্য অপেক্ষা না করেই তাদের কার্যক্রম চালিয়ে যেতে পারে।
Asynchronous (Async) ক্লায়েন্ট এবং সার্ভার ওয়েব সার্ভিসের পারফরম্যান্স উন্নত করার একটি অত্যন্ত কার্যকরী পদ্ধতি। এটি সার্ভিস কলের জন্য অপেক্ষা করার সময় ব্যবহারকারীর অ্যাপ্লিকেশনকে ব্লক না করে, বরং পেছনে প্রসেসিং চালিয়ে যাওয়ার সুযোগ প্রদান করে। Apache CXF এই ধরনের অ্যাসিঙ্ক্রোনাস কমিউনিকেশন সমর্থন করে, যা ওয়েব সার্ভিসের রেসপন্স টাইম কমাতে সহায়ক।
এই টিউটোরিয়ালে, আমরা দেখব কিভাবে Apache CXF ব্যবহার করে Async Client এবং Async Server তৈরি করা যায়।
Asynchronous Web Service server তৈরি করার জন্য, আমরা @WebService অ্যানোটেশন ব্যবহার করব এবং AsyncHandler
ইন্টারফেস প্রয়োগ করব। এর মাধ্যমে সার্ভিস কলগুলো অবিলম্বে প্রসেস হতে শুরু করবে এবং ক্লায়েন্টকে ব্লক করা হবে না।
এখানে একটি ওয়েব সার্ভিস এর উদাহরণ দেওয়া হল, যেখানে @WebService
অ্যানোটেশন ব্যবহার করা হয়েছে এবং AsyncHandler
ইন্টারফেস প্রয়োগ করা হয়েছে:
import javax.jws.WebService;
import org.apache.cxf.async.AsyncHandler;
import org.apache.cxf.jaxws.JaxWsServerFactoryBean;
import org.apache.cxf.interceptor.LoggingInInterceptor;
import org.apache.cxf.interceptor.LoggingOutInterceptor;
@WebService
public class HelloWorldAsyncImpl {
public String sayHello(String name) {
// সাধারণ ওয়েব সার্ভিস মেথড
return "Hello, " + name;
}
public void asyncHello(String name, AsyncHandler<String> asyncHandler) {
// অ্যাসিঙ্ক্রোনাস মেথড
String response = "Hello, " + name;
asyncHandler.handleResponse(new AsyncResponse<>(response)); // Response কে অ্যাসিঙ্ক্রোনাসভাবে প্রেরণ করা হচ্ছে
}
}
Apache CXF এ সার্ভার কনফিগার করার জন্য JaxWsServerFactoryBean
ব্যবহার করা হয়। অ্যাসিঙ্ক্রোনাস সার্ভিস সেটআপের জন্য নিচের মতো কনফিগারেশন করা যেতে পারে:
import org.apache.cxf.jaxws.JaxWsServerFactoryBean;
public class HelloWorldServer {
public static void main(String[] args) {
HelloWorldAsyncImpl implementor = new HelloWorldAsyncImpl();
JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean();
factory.setServiceClass(HelloWorldAsyncImpl.class);
factory.setAddress("http://localhost:8080/hello");
factory.create();
}
}
এখানে, JaxWsServerFactoryBean
ব্যবহার করে ওয়েব সার্ভিসের জন্য অ্যাসিঙ্ক্রোনাস কল সক্ষম করা হয়েছে এবং setAddress
এর মাধ্যমে ওয়েব সার্ভিসের URL কনফিগার করা হয়েছে।
অ্যাসিঙ্ক্রোনাস ক্লায়েন্টের জন্য, আমরা Client
ইন্টারফেসের মাধ্যমে ওয়েব সার্ভিসের সাথে যোগাযোগ করব, তবে ওয়েব সার্ভিস কল হবে অ্যাসিঙ্ক্রোনাস। Apache CXF অ্যাসিঙ্ক্রোনাস ক্লায়েন্টের জন্য AsyncResponseCallback
ইন্টারফেস ব্যবহার করে, যা কলের পর রেসপন্স পাওয়ার পর কার্যকলাপ সম্পন্ন করে।
এখানে একটি অ্যাসিঙ্ক্রোনাস ক্লায়েন্টের উদাহরণ দেওয়া হলো:
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import org.apache.cxf.async.AsyncResponseCallback;
import org.apache.cxf.message.Message;
public class HelloWorldAsyncClient {
public static void main(String[] args) {
// ক্লায়েন্ট তৈরি করা
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
factory.setServiceClass(HelloWorldAsyncImpl.class);
factory.setAddress("http://localhost:8080/hello");
HelloWorldAsyncImpl helloWorld = (HelloWorldAsyncImpl) factory.create();
// অ্যাসিঙ্ক্রোনাস কলের জন্য কলব্যাক পদ্ধতি সেট করা
helloWorld.asyncHello("John", new AsyncResponseCallback() {
@Override
public void handleResponse(Message message) {
String response = (String) message.getContent(String.class);
System.out.println("Async Response: " + response); // অ্যাসিঙ্ক্রোনাস রেসপন্স প্রদর্শন করা
}
@Override
public void handleFault(Message message) {
System.out.println("Async Fault: " + message);
}
});
}
}
এখানে AsyncResponseCallback
ব্যবহার করে ক্লায়েন্টে অ্যাসিঙ্ক্রোনাস রেসপন্স হ্যান্ডলিং করা হয়েছে। ওয়েব সার্ভিসের রেসপন্স পাওয়ার পর handleResponse
মেথড কল হবে, যেখানে আমরা রেসপন্স প্রিন্ট করতে পারব। যদি কোনো ত্রুটি ঘটে, তবে handleFault
মেথড কল হবে।
Apache CXF এ অ্যাসিঙ্ক্রোনাস ক্লায়েন্ট কনফিগার করতে নিম্নলিখিত কনফিগারেশন করা যেতে পারে:
<bean id="asyncHelloWorldClient" class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean">
<property name="serviceClass" value="com.example.HelloWorldAsyncImpl"/>
<property name="address" value="http://localhost:8080/hello"/>
</bean>
এই কনফিগারেশন JaxWsProxyFactoryBean
দিয়ে তৈরি করে ক্লায়েন্ট সার্ভিসের সাথে অ্যাসিঙ্ক্রোনাসভাবে যোগাযোগ করবে। এখানে, সার্ভিস ক্লাসের এবং ওয়েব সার্ভিসের URL নির্দিষ্ট করা হয়েছে।
Apache CXF এর মাধ্যমে অ্যাসিঙ্ক্রোনাস ক্লায়েন্ট এবং সার্ভার তৈরি করার প্রক্রিয়া তুলনামূলকভাবে সহজ। এটি ওয়েব সার্ভিসের পারফরম্যান্স এবং স্কেলেবিলিটি উন্নত করতে সহায়তা করে, বিশেষ করে যখন ওয়েব সার্ভিসটি অনেকগুলো রিকোয়েস্ট একসাথে প্রক্রিয়া করতে সক্ষম হয়।
Apache CXF ওয়েব সার্ভিসে Callback এবং Future API ব্যবহার করার সুবিধা দেয়, যা ওয়েব সার্ভিসের প্রক্রিয়া এবং আর্কিটেকচারকে আরও কার্যকরী এবং উন্নত করতে সাহায্য করে। বিশেষভাবে, Callback এবং Future API ব্যবহার করলে অ্যাসিনক্রোনাস (Asynchronous) ওয়েব সার্ভিস কলগুলি সহজে পরিচালনা করা যায়, যা ওয়েব সার্ভিসের পারফরম্যান্স এবং স্কেলেবিলিটি বাড়াতে সহায়তা করে।
Callback API ওয়েব সার্ভিসের ক্লায়েন্টকে সার্ভার থেকে একটি প্রতিক্রিয়া পাওয়ার পরে একটি নির্দিষ্ট ফাংশন বা মেথড কল করার অনুমতি দেয়। এটি মূলত asynchronous programming এ ব্যবহৃত হয়, যেখানে ক্লায়েন্ট একটি ওয়েব সার্ভিস কল করার পর তার পরবর্তী কাজগুলো করতে পারে এবং সার্ভিস থেকে সাড়া আসার পর একটি কাস্টম ক্যালব্যাক মেথড চালু হবে।
CXF এ Callback API ব্যবহার করতে, আপনাকে Callback Handler তৈরি করতে হবে। Callback Handler হচ্ছে একটি ক্লাস, যা সার্ভিসের প্রতিক্রিয়া পাওয়ার পর নির্দিষ্ট কাজ করতে সক্ষম হয়।
public class MyCallbackHandler implements CallbackHandler {
@Override
public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {
for (Callback callback : callbacks) {
if (callback instanceof MessageCallback) {
MessageCallback messageCallback = (MessageCallback) callback;
System.out.println("Received message: " + messageCallback.getMessage());
}
}
}
}
এই কেসে, MyCallbackHandler
ক্লাসটি একটি CallbackHandler
ইন্টারফেস ইমপ্লিমেন্ট করছে, যা ওয়েব সার্ভিসের মেসেজ পাওয়ার পর তার সাথে সম্পর্কিত কার্যক্রম চালাবে।
CXF তে Callback API ব্যবহার করতে ক্লায়েন্ট সাইডে এক্সিকিউশন পরিচালনা করতে হবে। এখানে একটি সাধারণ উদাহরণ দেওয়া হলো:
public class AsyncCallbackClient {
public static void main(String[] args) throws Exception {
// Create the client
MyService service = new MyService();
MyPortType port = service.getMyPort();
// Set up the callback handler
MyCallbackHandler callbackHandler = new MyCallbackHandler();
// Asynchronous call
Future<?> future = port.someAsyncMethodAsync(callbackHandler);
// Perform other tasks while waiting for the response
// Wait for the result
future.get();
}
}
এখানে, someAsyncMethodAsync
একটি অ্যাসিনক্রোনাস মেথড, যা কাস্টম ক্যালব্যাক হ্যান্ডলার MyCallbackHandler
এর মাধ্যমে সাড়া পাঠাবে। future.get()
মেথডটি এক্সিকিউশন বন্ধ হওয়ার আগ পর্যন্ত অপেক্ষা করবে।
Future API অ্যাসিনক্রোনাস অপারেশন পরিচালনার জন্য ব্যবহৃত হয়, যেখানে একটি থ্রেড প্রসেসিং চলাকালে পরবর্তী কাজগুলোর জন্য অপেক্ষা না করে অন্য কাজ করতে পারে। Future একটি ইন্টারফেস যা আপনাকে দীর্ঘ-running ওয়েব সার্ভিস কলের জন্য অ্যাসিনক্রোনাস কনফিগারেশন করার অনুমতি দেয়, এবং আপনি যখন রেসপন্স পাবেন তখন তা নিয়ে কাজ করতে পারেন।
CXF তে Future API ব্যবহারের মাধ্যমে ওয়েব সার্ভিসে অ্যাসিনক্রোনাস কল করতে গেলে, আপনি সার্ভিসের মেথডের সাথে Future
টাইপ ব্যবহার করবেন, যা রেসপন্স পাওয়ার পরে সেই ফলাফল প্রদান করবে।
CXF ওয়েব সার্ভিসে Future API ব্যবহার করতে নিম্নলিখিত কনফিগারেশন করা হয়:
public interface MyService {
@WebMethod
Future<String> someAsyncMethod();
}
এখানে, someAsyncMethod
মেথডটি Future<String>
টাইপ রিটার্ন করবে, যার মাধ্যমে অ্যাসিনক্রোনাস রেসপন্স সংগ্রহ করা যাবে।
public class AsyncServiceClient {
public static void main(String[] args) throws Exception {
// Service setup
MyService service = new MyService();
MyPortType port = service.getMyPort();
// Calling the async method
Future<String> future = port.someAsyncMethod();
// Perform other operations while waiting
String result = future.get(); // blocks until result is available
System.out.println("Result received: " + result);
}
}
এখানে, future.get()
মেথডটি সার্ভিস থেকে রেসপন্স পাওয়ার জন্য অপেক্ষা করবে এবং সেই রেসপন্সের মাধ্যমে পরবর্তী কার্যক্রম সম্পন্ন হবে। এই পদ্ধতিটি বিশেষভাবে ব্যবহারী যখন বড় এবং সময়সাপেক্ষ অপারেশন করতে চান।
বৈশিষ্ট্য | Callback API | Future API |
---|---|---|
ধরণ | Asynchronous callback (Notification) | Asynchronous result (Blocking call) |
ব্যবহার | সিস্টেম একটি কাজ শেষ হওয়ার পরে ক্লায়েন্টকে নোটিফাই করে | ক্লায়েন্ট রেসপন্সের জন্য অপেক্ষা করে, পরে ফলাফল নেয় |
অপেক্ষা | ক্যালব্যাক মেথড সম্পন্ন হওয়ার পরে ফলাফল পাওয়া যায় | future.get() ব্যবহার করে রেসপন্স পাওয়ার জন্য ব্লক করা হয় |
উদ্দেশ্য | ইভেন্ট-ড্রিভেন অ্যাসিনক্রোনাস প্রসেসিং | লম্বা সময় ধরে চলা প্রসেসিং বা কাজের পরে রেসপন্স পাওয়ার জন্য ব্যবহৃত |
Apache CXF এর মাধ্যমে Callback API এবং Future API ব্যবহারের মাধ্যমে ওয়েব সার্ভিসের অ্যাসিনক্রোনাস কলগুলি সহজে পরিচালিত হতে পারে। Callback ওয়েব সার্ভিসে ক্লায়েন্টকে দ্রুত প্রতিক্রিয়া দেয়, যেখানে Future API ওয়েব সার্ভিস কলের ফলাফল পাওয়ার জন্য ব্লকিং অপারেশন ব্যবহার করে। দুটোই সার্ভিসের পারফরম্যান্স এবং দক্ষতা বৃদ্ধি করতে গুরুত্বপূর্ণ ভূমিকা পালন করে, বিশেষ করে বড় সিস্টেম বা লম্বা সময়ের অপারেশনের ক্ষেত্রে।
Asynchronous Web Service ক্লায়েন্ট এবং সার্ভারের মধ্যে যোগাযোগের একটি বিশেষ পদ্ধতি যেখানে ক্লায়েন্ট সার্ভিস কল করার পর অপেক্ষা না করে অন্যান্য কাজ করতে পারে। ওয়েব সার্ভিসের কাজ সম্পন্ন হলে, সার্ভার ক্লায়েন্টকে একটি রেসপন্স পাঠায়। Apache CXF এই ধরনের অ্যাসিঙ্ক্রোনাস ওয়েব সার্ভিস কনফিগার এবং ইমপ্লিমেন্ট করার জন্য একটি শক্তিশালী ফ্রেমওয়ার্ক প্রদান করে।
এখানে আমরা একটি সিম্পল অ্যাসিঙ্ক্রোনাস ওয়েব সার্ভিসের উদাহরণ দেখব, যেখানে সার্ভিসটি একটি অ্যাসিঙ্ক্রোনাস মেথড ব্যবহার করবে এবং ক্লায়েন্ট তার ফলাফল একবার পেলে সেই অনুযায়ী কাজ করবে।
এখানে একটি ওয়েব সার্ভিসের উদাহরণ দেওয়া হচ্ছে যা একটি অ্যাসিঙ্ক্রোনাস মেথড প্রক্রিয়া করবে:
import javax.jws.WebMethod;
import javax.jws.WebService;
import org.apache.cxf.async.AsyncHandler;
@WebService
public class AsyncHelloWorldService {
@WebMethod
public String sayHello(String name) {
// সাধারণ ওয়েব সার্ভিস মেথড
return "Hello, " + name;
}
@WebMethod
public void asyncSayHello(String name, AsyncHandler<String> asyncHandler) {
// অ্যাসিঙ্ক্রোনাস মেথড - কল করার পর, কলব্যাক হ্যান্ডলারকে রেসপন্স পাঠানো হবে
String response = "Hello, " + name;
asyncHandler.handleResponse(new AsyncResponse<>(response)); // এখানে AsyncResponse ব্যবহার করে ফলাফল প্রেরণ
}
}
এখানে, asyncSayHello
মেথডটি অ্যাসিঙ্ক্রোনাসভাবে কাজ করে এবং যখন কাজ সম্পন্ন হবে, তখন সেই রেসপন্সকে AsyncHandler
ব্যবহার করে ক্লায়েন্টের কাছে পাঠানো হবে।
import org.apache.cxf.jaxws.JaxWsServerFactoryBean;
public class HelloWorldAsyncServer {
public static void main(String[] args) {
AsyncHelloWorldService implementor = new AsyncHelloWorldService();
JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean();
factory.setServiceClass(AsyncHelloWorldService.class);
factory.setAddress("http://localhost:8080/asyncHello");
factory.create();
}
}
এখানে, JaxWsServerFactoryBean
ব্যবহার করে ওয়েব সার্ভিসটি শুরু করা হয়েছে এবং অ্যাসিঙ্ক্রোনাস সাপোর্ট সহ asyncSayHello
মেথড তৈরি করা হয়েছে।
এখন, আমরা ক্লায়েন্ট সাইডে অ্যাসিঙ্ক্রোনাস কল করার উদাহরণ দেখব যেখানে AsyncResponseCallback
ব্যবহৃত হবে।
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import org.apache.cxf.async.AsyncResponseCallback;
import org.apache.cxf.message.Message;
public class AsyncHelloWorldClient {
public static void main(String[] args) {
// ক্লায়েন্ট তৈরি
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
factory.setServiceClass(AsyncHelloWorldService.class);
factory.setAddress("http://localhost:8080/asyncHello");
AsyncHelloWorldService helloWorld = (AsyncHelloWorldService) factory.create();
// অ্যাসিঙ্ক্রোনাস কলের জন্য CallBack হ্যান্ডলার সেট করা
helloWorld.asyncSayHello("John", new AsyncResponseCallback() {
@Override
public void handleResponse(Message message) {
String response = (String) message.getContent(String.class);
System.out.println("Received Async Response: " + response); // এখানে রেসপন্স প্রিন্ট করা হবে
}
@Override
public void handleFault(Message message) {
System.out.println("Async Fault: " + message);
}
});
// অন্য কাজ করা যেতে পারে
System.out.println("Async call is in progress...");
}
}
এখানে asyncSayHello
মেথডটি অ্যাসিঙ্ক্রোনাসভাবে কল করা হচ্ছে এবং AsyncResponseCallback
ব্যবহার করে রেসপন্স বা ত্রুটি হ্যান্ডলিং করা হচ্ছে। handleResponse
মেথডটি ক্লায়েন্টের কাছে রেসপন্স পৌঁছানোর পর কল হবে, যেখানে আমরা প্রাপ্ত রেসপন্স প্রিন্ট করব। ত্রুটির ক্ষেত্রে handleFault
মেথডটি কল হবে।
asyncSayHello
মেথডটি অ্যাসিঙ্ক্রোনাসভাবে কল করে। সার্ভিসে এই মেথডটি রিসিভ হওয়ার পর কার্যক্রম শুরু হবে।AsyncHandler
ব্যবহার করে রেসপন্সটি ক্লায়েন্টকে পাঠাবে।AsyncResponseCallback
এর মাধ্যমে রেসপন্স প্রাপ্তি নিশ্চিত করবে এবং সেই অনুযায়ী কাজ করবে।অ্যাসিঙ্ক্রোনাস ওয়েব সার্ভিসের মাধ্যমে ক্লায়েন্ট এবং সার্ভারের মধ্যে দ্রুত এবং স্কেলেবল কমিউনিকেশন সম্ভব হয়। Apache CXF এই ধরনের ওয়েব সার্ভিস বাস্তবায়ন করতে অত্যন্ত কার্যকরী ফিচার প্রদান করে। AsyncHandler
এবং AsyncResponseCallback
ব্যবহার করে ওয়েব সার্ভিসের পারফরম্যান্স এবং কার্যকারিতা বৃদ্ধি করা সম্ভব।
Read more